home *** CD-ROM | disk | FTP | other *** search
/ Alles Voor Internet / Tout Pour Internet / alles voor internet.iso / MacInternet™ / Telnet / NCSA / tn3270 2.4d7 source / tn3270 / cdialog.c < prev    next >
Text File  |  1992-04-17  |  11KB  |  417 lines

  1. /*
  2.  *  tn3270 for the Macintosh Source Code
  3.  *  Brown University Computing and Information Services
  4.  *  Version 2.4d7  April, 1992
  5.  *  Copyright (c) 1988, 1989, 1990, 1991, 1992 by Brown University and by
  6.  *  Peter John DiCamillo.
  7.  *
  8.  *  Permission is granted to any individual or institution to use, copy,
  9.  *  or redistribute the binary version of this software and its
  10.  *  documentation provided this notice and the copyright notices are
  11.  *  retained.  Permission is granted to any individual or non-profit
  12.  *  institution to use, copy, modify, or redistribute the source files
  13.  *  of this software provided this notice and the copyright notices are
  14.  *  retained.  This software may not be distributed for profit, either
  15.  *  in original form or in derivative works, nor can the source be
  16.  *  distributed to other than an individual or a non-profit institution.
  17.  *  Any  individual or group interested in seeing and/or using these
  18.  *  source files but who are prevented from doing so by the above
  19.  *  constraints should contact Don Wolfe, Assistant Vice-President for
  20.  *  Computer Systems at Brown University, (401) 863-7250, for possible
  21.  *  software licensing of the source developed at Brown.
  22.  *
  23.  *  Brown University and Peter John DiCamillo make no representations
  24.  *  about the suitability of this software for any purpose.
  25.  *
  26.  *  BROWN UNIVERSITY AND PETER JOHN DICAMILLO GIVE NO WARRANTY, EITHER
  27.  *  EXPRESS OR IMPLIED, FOR THE PROGRAM AND/OR DOCUMENTATION PROVIDED,
  28.  *  INCLUDING, WITHOUT LIMITATION, WARRANTY OF MERCHANTABILITY AND
  29.  *  WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE.
  30.  *
  31.  */
  32.  
  33. #if !defined(USEDUMP)
  34.     #include "maclib.h"
  35.     #include "termdef.h"
  36.     #include "tn3270funcs.h"
  37.     #include "globals.h"
  38. #else
  39.     #pragma load "tn3270DumpFile"
  40. #endif
  41.  
  42. #pragma segment 3270seg2
  43.  
  44. #define PICKERWIDTH 430
  45. #define PICKERHEIGHT 282
  46.  
  47. extern PaletteHandle myPalette;
  48. extern RGBColor realblack, realwhite;
  49. cnr *cdlgcp;
  50. PaletteHandle dlgpalette;
  51.  
  52. void colordlg(cnr *cp)
  53. {
  54. DialogPtr dlgptr;
  55. DialogPeek dStorage;
  56. WindowPtr behind;
  57. pascal Boolean (*filterProc) ();
  58. short gtype;
  59. Handle gitem, itmlist;
  60. Rect gbox, mybox, dlgbox;
  61. short i;
  62. GrafPtr gp;
  63. short itemHit;
  64. short * itemHitPtr;
  65. RGBColor actual;
  66. char tbase, texact, tinvert;
  67. RGBColor twhite, tyellow, tpink, tturquoise, tgreen,
  68.          tred, tblue, tblack, tback, tstat;
  69. static RGBColor dwhite = DFLTWHITE;
  70. static RGBColor dyellow = DFLTYELLOW;
  71. static RGBColor dpink = DFLTPINK;
  72. static RGBColor dturquoise = DFLTTURQUOISE;
  73. static RGBColor dgreen = DFLTGREEN;
  74. static RGBColor dred = DFLTRED;
  75. static RGBColor dblue = DFLTBLUE;
  76. static RGBColor dblack = DFLTBLACK;
  77. static RGBColor dback = DFLTBACK;
  78. static RGBColor dstat = DFLTSTAT;
  79. static RGBColor ctdpink = CTDFLTPINK;
  80. static RGBColor ctdturquoise = CTDFLTTURQUOISE;
  81. static RGBColor ctdblue = CTDFLTBLUE;
  82. static RGBColor ctdback = CTDFLTBACK;
  83.  
  84. RGBColor rgbtemp;
  85.  
  86. GDHandle currGD;
  87. short scrhsize, scrvsize;
  88. short whsize, wvsize;
  89. Rect r;
  90.  
  91. dStorage = 0;
  92. behind = (WindowPtr)-1;
  93. dlgbox.top = 16;
  94. dlgbox.left = 44;
  95. dlgbox.bottom = 326;
  96. dlgbox.right = 469;
  97. itmlist = GetResource('DITL', 268);
  98. if (itmlist == 0) return;
  99. HandToHand(&itmlist);
  100. if (itmlist == 0) return;
  101. dlgptr = NewCDialog(dStorage, &dlgbox, "\pColors", 0, 3, behind,
  102.                     0, 0L, itmlist);
  103.  
  104. /* center the dialog on the current gDevice */
  105. if (cp->myWindow != 0) {
  106.     GetGlobalRect(cp->myWindow, &r);
  107.     currGD = myGetMaxDevice(&r);
  108.     }
  109. else {
  110.     currGD = GetMainDevice();
  111.     }
  112. gbox = (*currGD)->gdRect;
  113. scrhsize = gbox.right - gbox.left;
  114. scrvsize = gbox.bottom - gbox.top;
  115. whsize = dlgptr->portRect.right-dlgptr->portRect.left;
  116. wvsize = dlgptr->portRect.bottom - dlgptr->portRect.top;
  117. MoveWindow(dlgptr, gbox.left + (scrhsize-whsize)/2, 
  118.                    gbox.top + (scrvsize-wvsize)/3, 0);
  119.  
  120.  
  121. dlgpalette = NewPalette(11, 0L, pmCourteous, 0);
  122. SetPalette(dlgptr, dlgpalette, true);
  123. fixcolors(dlgpalette, cp);
  124. ActivatePalette(dlgptr);
  125.  
  126. /* define routine to draw user item */
  127. cdlgcp = cp;
  128. for (i=5; i < 24; i+=2) {
  129.     GetDItem(dlgptr, i, >ype, &gitem, &mybox);
  130.     SetDItem(dlgptr, i, gtype, (Handle)colorbox, &mybox);
  131.     }
  132.  
  133. /* define check boxes */
  134. defcbox(dlgptr, cp);
  135. arrowcursor();
  136. ShowWindow(dlgptr);
  137.  
  138. /* frame the default selection */
  139. GetDItem(dlgptr, 1, >ype, &gitem, &gbox);
  140. GetPort(&gp);
  141. SetPort(dlgptr);
  142. PenSize(3,3);
  143. InsetRect(&gbox, -4, -4);
  144. FrameRoundRect(&gbox, 16, 16);
  145. PenSize(1,1);
  146. SetPort(gp);
  147.  
  148. itemHit = 99;
  149. itemHitPtr = &itemHit;
  150. filterProc = DlgFilter;
  151.  
  152. /* copy current settings */
  153. tbase = cp->cs.basecolor;
  154. texact = cp->cs.exactcolor;
  155. tinvert = cp->cs.invertbw;
  156. twhite = cp->cs.usrwhite;
  157. tyellow = cp->cs.usryellow;
  158. tpink = cp->cs.usrpink;
  159. tturquoise = cp->cs.usrturquoise;
  160. tgreen = cp->cs.usrgreen;
  161. tred = cp->cs.usrred;
  162. tblue = cp->cs.usrblue;
  163. tblack = cp->cs.usrblack;
  164. tback = cp->cs.usrback;
  165. tstat = cp->cs.usrstat;
  166.  
  167. while ((itemHit != 1) && (itemHit != 3)) {
  168.     ModalDialog((ModalFilterProcPtr)filterProc, itemHitPtr);
  169.     switch(itemHit) {
  170.         case 1:                /* OK */
  171.                 if (cp->myWindow != 0) fixcolors(cp->myPalette, cp);
  172.                 break;
  173.         case 2:                /* Set Default */
  174.                 cp->cs.usrwhite = dwhite;
  175.                 cp->cs.usryellow = dyellow;
  176.                 cp->cs.usrgreen = dgreen;
  177.                 cp->cs.usrred = dred;
  178.                 cp->cs.usrblack = dblack;
  179.                 cp->cs.usrstat = dstat;
  180.                 if (cp->cs.exactcolor) {
  181.                     cp->cs.usrpink = dpink;
  182.                     cp->cs.usrturquoise = dturquoise;
  183.                     cp->cs.usrblue = dblue;
  184.                     cp->cs.usrback = dback;
  185.                     }
  186.                 else {
  187.                     cp->cs.usrpink = ctdpink;
  188.                     cp->cs.usrturquoise = ctdturquoise;
  189.                     cp->cs.usrblue = ctdblue;
  190.                     cp->cs.usrback = ctdback;
  191.                     }
  192.                 if (!(cp->cs.exactcolor)) {
  193.                     cp->cs.exactcolor = 1;
  194.                     fixcolors(dlgpalette, cp);
  195.                     ActivatePalette(dlgptr);
  196.                     cp->cs.exactcolor = 0;
  197.                     }
  198.                 cp->cs.basecolor = 0;
  199.                 cp->cs.invertbw = 0;
  200.                 defcbox(dlgptr, cp);
  201.                 fixcolors(dlgpalette, cp);
  202.                 ActivatePalette(dlgptr);
  203.                 if (cp->myWindow != 0) {
  204.                     GetEntryColor(dlgpalette, RGBback, &rgbtemp);
  205.                     GetPort(&gp);
  206.                     SetPort(cp->WritePtr);
  207.                     if (cp->textmap) setgdev(cp);
  208.                     RGBBackColor(&rgbtemp);
  209.                     if (cp->PictPtr != 0) {
  210.                         SetPort(cp->PictPtr);
  211.                         RGBBackColor(&rgbtemp);
  212.                         }
  213.                     if (cp->textmap) resetgdev();
  214.                     SetPort(gp);
  215.                     }
  216.                 updcolors(dlgptr);
  217.                 break;
  218.         case 3:                /* Cancel */
  219.                 cp->cs.basecolor = tbase;
  220.                 cp->cs.exactcolor = texact;
  221.                 cp->cs.invertbw = tinvert;
  222.                 cp->cs.usrwhite = twhite;
  223.                 cp->cs.usryellow = tyellow;
  224.                 cp->cs.usrpink = tpink;
  225.                 cp->cs.usrturquoise = tturquoise;
  226.                 cp->cs.usrgreen = tgreen;
  227.                 cp->cs.usrred = tred;
  228.                 cp->cs.usrblue = tblue;
  229.                 cp->cs.usrblack = tblack;
  230.                 cp->cs.usrback = tback;
  231.                 cp->cs.usrstat = tstat;
  232.                 fixcolors(dlgpalette, cp);
  233.                 ActivatePalette(dlgptr);
  234.                 if (cp->myWindow != 0) {
  235.                     GetEntryColor(dlgpalette, RGBback, &rgbtemp);
  236.                     GetPort(&gp);
  237.                     SetPort(cp->WritePtr);
  238.                     if (cp->textmap) setgdev(cp);
  239.                     RGBBackColor(&rgbtemp);
  240.                     if (cp->PictPtr != 0) {
  241.                         SetPort(cp->PictPtr);
  242.                         RGBBackColor(&rgbtemp);
  243.                         }
  244.                     if (cp->textmap) resetgdev();
  245.                     SetPort(gp);
  246.                     }
  247.                 break;
  248.         case 5:            /* white */
  249.         case 6:
  250.                 getclr(dlgptr, "white", &(cp->cs.usrwhite), cp);
  251.                 break;
  252.         case 7:            /* yellow */
  253.         case 8:
  254.                 getclr(dlgptr, "yellow", &(cp->cs.usryellow), cp);
  255.                 break;
  256.         case 9:            /* turquoise */
  257.         case 10:
  258.                 getclr(dlgptr, "turquoise", &(cp->cs.usrturquoise), cp);
  259.                 break;
  260.         case 11:        /* green */
  261.         case 12:
  262.                 getclr(dlgptr, "green", &(cp->cs.usrgreen), cp);
  263.                 break;
  264.         case 13:        /* pink */
  265.         case 14:
  266.                 getclr(dlgptr, "pink", &(cp->cs.usrpink), cp);
  267.                 break;
  268.         case 15:        /* red */
  269.         case 16:
  270.                 getclr(dlgptr, "red", &(cp->cs.usrred), cp);
  271.                 break;
  272.         case 17:        /* blue */
  273.         case 18:
  274.                 getclr(dlgptr, "blue", &(cp->cs.usrblue), cp);
  275.                 break;
  276.         case 19:        /* black */
  277.         case 20:
  278.                 getclr(dlgptr, "black", &(cp->cs.usrblack), cp);
  279.                 break;
  280.         case 21:        /* background */
  281.         case 22:
  282.                 getclr(dlgptr, "bkground", &(cp->cs.usrback), cp);
  283.                 GetEntryColor(dlgpalette, RGBback, &rgbtemp);
  284.                 GetPort(&gp);
  285.                 if (cp->myWindow != 0) {
  286.                     SetPort(cp->WritePtr);
  287.                     if (cp->textmap) setgdev(cp);
  288.                     RGBBackColor(&rgbtemp);
  289.                     if (cp->textmap) resetgdev();
  290.                     }
  291.                 actualcolor(&rgbtemp, &actual, cp);
  292.                 if (actual == realwhite) {
  293.                     cp->cs.invertbw = 1;
  294.                     defcbox(dlgptr, cp);
  295.                     }
  296.                 else if (actual == realblack) {
  297.                     cp->cs.invertbw = 0;
  298.                     defcbox(dlgptr, cp);
  299.                     }
  300.                 if (cp->PictPtr != 0) {
  301.                     if (cp->textmap) setgdev(cp);
  302.                     SetPort(cp->PictPtr);
  303.                     RGBBackColor(&rgbtemp);
  304.                     if (cp->textmap) resetgdev();
  305.                     }
  306.                 SetPort(gp);
  307.                 break;
  308.         case 23:        /* status line */
  309.         case 24:
  310.                 getclr(dlgptr, "status", &(cp->cs.usrstat), cp);
  311.                 break;
  312.         case 25:        /* base color */
  313.                 cp->cs.basecolor ^= 1;
  314.                 defcbox(dlgptr, cp);
  315.                 break;
  316.         case 26:        /* exact color */
  317.                 cp->cs.exactcolor ^= 1;
  318.                 fixcolors(dlgpalette, cp);
  319.                 ActivatePalette(dlgptr);
  320.                 updcolors(dlgptr);
  321.                 defcbox(dlgptr, cp);
  322.                 break;
  323.         case 27:        /* invert black and white */
  324.                 cp->cs.invertbw ^= 1;
  325.                 defcbox(dlgptr, cp);
  326.                 break;
  327.         default:
  328.                 break;
  329.         }
  330.     }
  331. DisposDialog(dlgptr);
  332. }
  333.  
  334. void getclr(DialogPtr dlgptr, unsigned char *cname, RGBColor *cin, cnr *cp)
  335. {
  336. GrafPtr gp;
  337. Point where;
  338. short result;
  339. short gtype;
  340. Handle gitem;
  341. Rect gbox, r;
  342. unsigned char prompt[48];
  343. RGBColor cout;
  344. GDHandle currGD;
  345. short scrhsize, scrvsize;
  346.  
  347. strcpy(prompt, "Select color for ");
  348. strcat(prompt, cname);
  349. strcat(prompt, ":");
  350. GetPort(&gp);
  351. if (cp->myWindow != 0) {
  352.     SetPort(cp->myWindow);
  353.     }
  354.  
  355. /* center color picker on current gDevice */
  356. if (cp->myWindow != 0) {
  357.     GetGlobalRect(cp->myWindow, &r);
  358.     currGD = myGetMaxDevice(&r);
  359.     }
  360. else {
  361.     currGD = GetMainDevice();
  362.     }
  363. gbox = (*currGD)->gdRect;
  364. scrhsize = gbox.right - gbox.left;
  365. scrvsize = gbox.bottom - gbox.top;
  366. where.h = gbox.left + (scrhsize-PICKERWIDTH)/2;
  367. where.v = gbox.top + (scrvsize-PICKERHEIGHT)/3;
  368.  
  369. c2pstr(prompt);
  370. result = GetColor(where, prompt, cin, &cout);
  371. p2cstr(prompt);
  372. if (result) {
  373.     *cin = cout;
  374.     fixcolors(dlgpalette, cp);
  375.     ActivatePalette(dlgptr);
  376.     updcolors(dlgptr);
  377.     }
  378. /* frame the default selection again */
  379. GetDItem(dlgptr, 1, >ype, &gitem, &gbox);
  380. SetPort(dlgptr);
  381. PenSize(3,3);
  382. InsetRect(&gbox, -4, -4);
  383. FrameRoundRect(&gbox, 16, 16);
  384. PenSize(1,1);
  385. SetPort(gp);
  386. }
  387.  
  388. void defcbox(DialogPtr dlgptr, cnr *cp)
  389. {
  390. short gtype;
  391. Handle gitem;
  392. Rect gbox;
  393.  
  394. GetDItem(dlgptr, 25, >ype, &gitem, &gbox);
  395. SetCtlValue((ControlHandle)gitem, cp->cs.basecolor);
  396. GetDItem(dlgptr, 26, >ype, &gitem, &gbox);
  397. SetCtlValue((ControlHandle)gitem, cp->cs.exactcolor);
  398. GetDItem(dlgptr, 27, >ype, &gitem, &gbox);
  399. SetCtlValue((ControlHandle)gitem, cp->cs.invertbw);
  400. }
  401.  
  402. void updcolors(DialogPtr dlgptr)
  403. DialogPtr dlgptr;
  404. {
  405. Rect crect;
  406. GrafPtr gp;
  407.  
  408. crect.top = 5;
  409. crect.left = 5;
  410. crect.bottom = 295;
  411. crect.right = 100;
  412. GetPort(&gp);
  413. SetPort(dlgptr);
  414. InvalRect(&crect);
  415. SetPort(gp);
  416. }
  417.